package com.c2b.algorithm.leetcode.base;

/**
 * <a href="https://leetcode.cn/problems/design-parking-system/">设计停车系统</a>
 * <p>请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位：大，中和小，每种尺寸分别有固定数目的车位。<br>
 * 请你实现 ParkingSystem 类：
 * <ui>
 * <li>ParkingSystem(int big, int medium, int small) 初始化 ParkingSystem 类，三个参数分别对应每种停车位的数目。</li>
 * <li>bool addCar(int carType) 检查是否有 carType 对应的停车位。 carType 有三种类型：大，中，小，分别用数字 1， 2 和 3 表示。一辆车只能停在  carType 对应尺寸的停车位中。如果没有空车位，请返回 false ，否则将该车停入车位并返回 true。</li>
 * </ui>
 * </p>
 *
 * <pre>
 * 示例 1：
 *      输入：
 *          ["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]
 *          [[1, 1, 0], [1], [2], [3], [1]]
 *      输出：
 *          [null, true, true, false, false]
 *      解释：
 *          ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0);
 *          parkingSystem.addCar(1); // 返回 true ，因为有 1 个空的大车位
 *          parkingSystem.addCar(2); // 返回 true ，因为有 1 个空的中车位
 *          parkingSystem.addCar(3); // 返回 false ，因为没有空的小车位
 *          parkingSystem.addCar(1); // 返回 false ，因为没有空的大车位，唯一一个大车位已经被占据了
 * </pre>
 * <b>提示：</b>
 * <ui>
 * <li>0 <= big, medium, small <= 1000</li>
 * <li>carType 取值为 1， 2 或 3</li>
 * <li>最多会调用 addCar 函数 1000 次</li>
 * </ui>
 *
 * @author c2b
 * @since 2023/4/13 10:40
 */
public class LC1603ParkingSystem_S {
    private int remainBigCount = 0;
    private int remainMediumCount = 0;
    private int remainSmallCount = 0;

    public LC1603ParkingSystem_S(int big, int medium, int small) {
        this.remainBigCount = big;
        this.remainMediumCount = medium;
        this.remainSmallCount = small;
    }

    public boolean addCar(int carType) {
        switch (carType) {
            case 1:
                if (remainBigCount > 0) {
                    --remainBigCount;
                    return true;
                }
                break;
            case 2:
                if (remainMediumCount > 0) {
                    --remainMediumCount;
                    return true;
                }
                break;
            case 3:
                if (remainSmallCount > 0) {
                    --remainSmallCount;
                    return true;
                }
                break;
        }
        return false;
    }

    public static void main(String[] args) {
        LC1603ParkingSystem_S lc1603ParkingSystem_s = new LC1603ParkingSystem_S(1, 1, 0);
        System.out.println(lc1603ParkingSystem_s.addCar(1));
        System.out.println(lc1603ParkingSystem_s.addCar(2));
        System.out.println(lc1603ParkingSystem_s.addCar(3));
        System.out.println(lc1603ParkingSystem_s.addCar(1));
    }
}


